// 内置new 的实现

/**
 * 
 * @param {*} Func 要操作类的实例
 * @param {*} args 存储未来传递给func类的实参
 */
function _new(Func, ...args) {
    // 1.创建一个Func的实例对象
    let obj = {}
    obj.__proto__ = Func.prototype
    // 2.把Func当作普通函数执行。让方法中的this指向创建的实例
    let result = Func.call(obj, ...args)
    // 3. 分析函数执行的返回值
    if(result !== null && /^(object|function)&/.test(typeof result)) {
        return result
    }
    return obj
}

Object.create(null)

Object.create = function create(prototype) {
    if(prototype === null || typeof prototype !== 'object') {
        throw new TypeError(`Object prototype may only be an Object or null: ${prototype}`)
    }
    // 创建一个类，创建这个类的实例，那么实例的__proto__指向类的prototypt
    // 我们让类的prototypt等于传递的prototype
    function Temp()
    Temp.prototype = prototype
    return new Temp
}